package com.powernode.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;

/**
 * ClassName:aspect
 * <p>
 * Description:
 *
 * @author hacker
 * @Create 2024/2/22 17:22
 * @Version 1.0
 */
@Component
@Aspect  // 这个 注解 代表 他是 一个 切面类
public class aspect {

    @Pointcut("execution(* com.powernode.service.*Service.*(..))")
    public void servicepo(){

    }

    // 增强 方法

    @Around("servicepo()")
    public void augg(ProceedingJoinPoint pjp) throws Throwable {
        Signature signature = pjp.getSignature();  // 通过 这个 可以 获取 目标方法 名 和 目标 对象的 静态类型
        String name = signature.getName();
        String declaringTypeName = signature.getDeclaringTypeName();
        Long start = System.currentTimeMillis();
        for(int i=0;i!=1000;++i)
           pjp.proceed();  // 先保证方法 执行了
        Long end = System.currentTimeMillis();
        System.out.println(declaringTypeName+"."+name+"多次执行时间为"+(end-start));
    }
}
